package com.itheima.dubbo.web;

import com.itheima.dubbo.User;
import com.itheima.dubbo.UserInterface;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.Method;
import org.apache.dubbo.rpc.RpcContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 超时时间级别:   消费方(方法级别)>消费方(接口级别)>提供方(方法级别)>提供方(接口级别)> 通用配置
 */
@RestController
@RequestMapping("user")
public class UserController {


   @DubboReference      // 远程服务调用注解
  // @DubboReference(check = false)      // 启动时设置不检查服务提供方是否存在
   // @DubboReference(cluster = "failfast")      // 容错机制 failfast快速失败,只调用一次
    //@DubboReference(loadbalance = "roundrobin")      // 负载均衡策略的修改 roundrobin(轮询)
    //@DubboReference(timeout = 1800)      // 消费方超时时间
    //@DubboReference(methods = {@Method(name = "getById",timeout = 1500)}) // 消费方 方法级别 超时时间注解
   // @DubboReference(version = "1.0.1")      // 多版本灰度发布
            UserInterface userInterface;


    @GetMapping("hello")
    public String hello(String username) {
        return userInterface.hello(username);
    }

    @GetMapping("getById")
    public User getById(Long id) {
        User user = new User();
        user.setId(id);
        //隐世传参还是通过上下文对象进行传递的。
        RpcContext.getContext().setAttachment("name", "上海");
        return userInterface.getById(user);
    }
}
